package in.data.annotation; import android.os.Parcel; import android.os.Parcelable; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.List; import in.lib.utils.Debug; import in.lib.utils.SerialReaderUtil; import in.lib.utils.SerialWriterUtil; import lombok.Data; @Data public class FileAnnotation extends Annotation { protected String fileToken; protected String thumbUrl = ""; protected int thumbWidth = 0, thumbHeight = 0; @Override public FileAnnotation createFrom(JsonElement element) { try { JsonObject value = element.getAsJsonObject(); if (value.has("data")) { value = value.get("data").getAsJsonObject(); } if (value.has("kind") && !value.get("kind").getAsString().equals("image")) { return null; } this.id = value.get("id").getAsString(); this.fileToken = value.get("file_token").getAsString(); if (value.has("derived_files")) { JsonObject files = value.get("derived_files").getAsJsonObject(); JsonObject thumb = null; if (files.has("image_thumb_960r")) { thumb = files.get("image_thumb_960r").getAsJsonObject(); } else if (files.has("image_thumb_200s")) { thumb = files.get("image_thumb_200s").getAsJsonObject(); } if (thumb != null) { JsonObject thumbInfo = thumb.get("image_info").getAsJsonObject(); this.thumbUrl = thumb.get("url").getAsString(); this.thumbWidth = thumbInfo.get("width").getAsInt(); this.thumbHeight = thumbInfo.get("height").getAsInt(); } } return this; } catch (Exception e) { e.printStackTrace(); } return null; } @Override public FileAnnotation createFrom(Parcel parcel) { super.createFrom(parcel); return this; } @Override public List<FileAnnotation> createListFrom(JsonElement element) { try { JsonArray fileArray = element.getAsJsonArray(); ArrayList<FileAnnotation> files = new ArrayList<FileAnnotation>(fileArray.size()); for (JsonElement fileElement : fileArray) { FileAnnotation file = new FileAnnotation().createFrom(fileElement); if (file != null) { files.add(file); } } return files; } catch (Exception e) { Debug.out(e); } return null; } @Override public String getVersion() { return "53297329-2081-4804-9c76-d2949b5039f5"; } @Override public FileAnnotation read(SerialReaderUtil util) { if (super.read(util) != null) { try { String version = util.readString(); if (!version.equals(getVersion())) return null; id = util.readString(); fileToken = util.readString(); thumbUrl = util.readString(); thumbWidth = util.readInt(); thumbHeight = util.readInt(); return this; } catch (Exception e) { Debug.out(e); } } return null; } @Override public void write(SerialWriterUtil util) { super.write(util); try { util.writeString(getVersion()); util.writeString(id); util.writeString(fileToken); util.writeString(thumbUrl); util.writeInt(thumbWidth); util.writeInt(thumbHeight); } catch (Exception e) { Debug.out(e); } } @Override public JsonElement toAnnotation() { JsonObject object = new JsonObject(); JsonObject file = new JsonObject(); JsonObject value = new JsonObject(); file.addProperty("file_id", getId()); file.addProperty("file_token", getFileToken()); file.addProperty("format", "oembed"); object.addProperty("type", "net.app.core.oembed"); value.add("+net.app.core.file", file); object.add("value", value); return object; } @Override public String getAnnotationKey() { return ""; } public static final Parcelable.Creator<FileAnnotation> CREATOR = new Creator<FileAnnotation>() { @Override public FileAnnotation[] newArray(int size) { return new FileAnnotation[size]; } @Override public FileAnnotation createFromParcel(Parcel source) { return new FileAnnotation().createFrom(source); } }; }